﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.Reporting.WebForms;
using System.IO;
using SIBI.Helpers;
using SIBI.Models;


namespace MvcReportViewer.Reports.EstMantenimiento
{
    public partial class Reporte :  System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {
            f_Reporte();
        }
        private void f_Reporte()
        {
            // Obtener Parametros
            string lsserial = this.txtSerial.Text.TrimEnd().ToUpper();
            DateTime? fechainid = null;
            DateTime? fechainih = null;
            DateTime? fechafind = null;
            DateTime? fechafinh = null;
            DateTime fecha;
            if (DateTime.TryParse(this.txtFechaInid.Text, out fecha)) fechainid = fecha;
            if (DateTime.TryParse(this.txtFechaFind.Text, out fecha)) fechafind = fecha;
            if (DateTime.TryParse(this.txtFechaInih.Text, out fecha)) fechainih = fecha;
            if (DateTime.TryParse(this.txtFechaFinh.Text, out fecha)) fechafinh = fecha;
            
            //Crear Datasets que usa el Reporte
            ReportHelper.RepDataSet<string> tblReporte = new ReportHelper.RepDataSet<string>("Reporte", "repNombre");
            ReportHelper.RepDataSet<string> tblMtto = new ReportHelper.RepDataSet<string>("Mantenimiento", "cBienInformaticoId,cnom,ctipb,cage,dini,dfin,cobs,crep");

            tblReporte.Rows.Add(new object[] { "Reporte de Control de Mantenimiento" });
            // Llenar Datasets con Datos desde el Contexto o Contextos.
            using (SIBIContext db = new SIBIContext())
            {
                foreach (Mantenimiento s in db.Mantenimientoes
                    .Where(s => ((lsserial.Equals("") || s.BienInformaticoId.ToUpper().Contains(lsserial)) &&
                                    ((fechainid == null) ||
                                        ((fechainih == null) && (s.dfim == fechainid)) ||
                                        ((s.dfim >= fechainid) && (s.dfim <= fechainih))
                                    ) &&
                                    ((fechafind == null) ||
                                        ((fechafinh == null) && (s.dffm == fechafind)) ||
                                        ((s.dffm >= fechafind) && (s.dffm <= fechafinh))
                                    )
                                 )

                          )
                )
                {
                    tblMtto.Rows.Add(new object[] { s.BienInformaticoId, s.nbin.nmym.ncob.cnom, s.nbin.ntib.cnom, s.npro.cnom, s.dfim, s.dffm, s.cobs, s.cflg ? "Si" : "No" });
                }
            }
            ReportViewer1.Reset();
            // Cargar el Reporte en pantalla, con sus parametros.
            ReportHelper.SetReportData(ReportViewer1, "/REP/REP_EstMantenimiento.rdl", "Reporte,Mantenimiento", new object[] { tblReporte, tblMtto }
                , "repNombre", "Reporte Control Mantenimiento");

        }

        
        protected void Button1_Click(object sender, EventArgs e)
        {
            f_Reporte();
        }
    }
}
